[アップデート] Account Factory for Terraform (AFT) で カスタマイズリクエストの追跡が可能に
どうも、ちゃだいん(@chazuke4649)です。
ちょっと前のアップデートですが、AFTモジュールのバージョン 1.9.0以降で、AFT) で カスタマイズリクエストの追跡が可能になりました。
カスタマイズリクエストの追跡が AWS Control Tower Account Factory for Terraform で利用可能に
Release 1.9.0 · aws-ia/terraform-aws-control_tower_account_factory
何が嬉しい?
GitHubのリリースノートの説明が一番わかりやすかったので、引用します。
AFT では、Lambda ベースのアカウント カスタマイズ ワークフロー中に生成されたログに、ターゲット アカウント ID と一意のリクエスト ID の両方が含まれるようになりました。AFT はまた、2 つの新しい CloudWatch Log Insights クエリをプロビジョニングします。これを使用して、アカウント ID またはカスタマイズ リクエスト ID によるカスタマイズ リクエストに関連するログを検索できます。これらのクエリは、障害が発生している場所を特定しやすくすることで、トラブルシューティングの労力を軽減します。
AFTのカスタマイズのワークフローはシンプルとは言えず、エラーでうまくいかなかった時のトラブルシュート/原因箇所の特定にはコツがいりました。(おおむね動いているStep Functionステートマシンと、各アカウント単位のCodePipelineをモニタリングすれば良いのですが)
今回のアップデートにより、カスタマイズリクエストごとにログがユニークなIDを持ってくれるようになり、かつ、CloudWatch Logs Insight のサンプルクエリも用意されたので、そのサンプルクエリを利用して、AWSアカウントID or カスタマイズリクエストID で追跡できるようになった模様です。
先にまとめ
- カスタマイズ実行時のSFnステートマシン
aft-account-provisioning-framework
にて実行される複数のLambdaログを集約してクエリできるようにしてくれるイメージ - SFn以降後続の各アカウント単位のCodePipelineによるグローバルカスタマイズ/アカウントカスタマイズの成功/エラーは、対象外(引き続き、CodePipelineを見る必要あり)
やってみた
1.AFTモジュールの更新
まずは、AFTモジュール自体のバージョンアップを行います。(詳細は割愛)
AFTモジュールをバージョン1.9.2
に更新しました。
CloudWatch Logs Insight のコンソールを確認すると、確かにサンプルクエリとして2つ登録されていました。
2.カスタマイズ実行
既存アカウント1つに対して、S3バケットを作る簡単なカスタマイズを少し変更させて3回実行しました。
カスタマイズの実行については、以下を参考ください。
3.Logs Insightを確認
新しく用意された CloudWatch Logs Insight のサンプルクエリを見ていきたいと思います。
公式ドキュメントの該当箇所としては、以下の「AFT アカウントカスタマイズリクエストの追跡によるトラブルシューティング」の箇所をご覧ください。
Troubleshooting with AFT account customization request tracing - AWS Control Tower
AWSアカウントIDでフィルタするクエリ
同じAWSアカウントに対して3回カスタマイズを実行したので、グラフを見ると3つの時間帯でロググループがヒットしていることがわかります。
カスタマイズリクエストIDでフィルタするクエリ
カスタマイズリクエストID単位でクエリすると、3回それぞれ異なるIDが発行されます。1回目のIDでクエリすると1回目分のみヒットしました。
ちなみに、「カスタマイズリクエストID」は、SFnステートマシン aft-account-provisioning-framework
の各実行の入力を見ると、
- "customization_request_id": "8b9ed1fb-aab8-490b-87ce-2cce78b46567"
といった感じで、カスタマイズリクエストIDを確認することができます。
終わりに
SFnによる各LambdaログをLogs Insights側で効率的にクエリできるようになりました。とはいえ、後半のCodePipelineによる実際のカスタマイズ処理は対象範囲外なので注意が必要です。(個人的には、CodePipelineも含めてAFT全体の最初から最後までを全て包含してほしかったw)
それでは今日はこの辺で。ちゃだいん(@chazuke4649)でした。